home *** CD-ROM | disk | FTP | other *** search
/ Magnum One / Magnum One (Mid-American Digital) (Disc Manufacturing).iso / d12 / v7n21.arc / GETASCII.PAS < prev    next >
Pascal/Delphi Source File  |  1988-11-14  |  2KB  |  67 lines

  1. {$R+}
  2. PROGRAM GetASCII;
  3. CONST
  4.   buffsize = 16384;
  5. TYPE
  6.   BuffType = ARRAY[1..buffsize] OF Char;
  7. VAR
  8.   FilVar   : FILE;
  9.   Filename : STRING[64];
  10.   Actual   : Integer;
  11.   MinLen   : Byte;
  12.   buffer   : BuffType;
  13.   ASCII    : ARRAY[Char] OF Boolean;  
  14.   overlap  : Byte;
  15.  
  16.   PROCEDURE Check(VAR B : BuffType; top : Integer; VAR OvLap : Byte);
  17.   VAR P, Pend, i : Integer;
  18.   BEGIN
  19.     P := 1;
  20.     OvLap := 0;
  21.     REPEAT
  22.       IF ASCII[B[P]] THEN
  23.         BEGIN
  24.           Pend := P;
  25.           REPEAT
  26.             Pend := Succ(Pend)
  27.           UNTIL (NOT ASCII[B[Pend]]) OR (Pend = top);
  28.           IF ((Pend = top) AND ASCII[B[Pend]]) THEN
  29.             OvLap := Succ(Pend-P)
  30.           ELSE
  31.             IF Succ(Pend-P) >= MinLen THEN
  32.               BEGIN
  33.                 FOR i := P TO Pred(Pend) DO Write(B[i]);
  34.                 WriteLn;
  35.               END;
  36.           P := Succ(Pend);
  37.         END
  38.       ELSE P := Succ(P);
  39.     UNTIL (P >= top);
  40.   END;
  41.  
  42.  
  43. BEGIN
  44.   FillChar(ASCII, SizeOf(ASCII), False);
  45.   FillChar(ASCII[#32], 96, True);
  46.   (* Now for any character CH, ASCII[CH] is true *)
  47.   (* only if CH is a charcter from #32 to #127   *)
  48.   Write('Enter minimum string length to check for : ');
  49.   ReadLn(MinLen);
  50.   Write('Enter name of file to check: ');
  51.   ReadLn(Filename);
  52.   Assign(FilVar, Filename);
  53.   Reset(FilVar, 1);
  54.   WHILE NOT EoF(FilVar) DO
  55.     BEGIN
  56.       BlockRead(FilVar, buffer, buffsize, Actual);
  57.       Check(buffer, Actual, overlap);
  58.       {Back up to get any that "cross" into the next buffer}
  59.       IF (Actual = buffsize) AND (overlap > 0) THEN
  60.         Seek(FilVar, FilePos(FilVar)-overlap);
  61. (* NOTE:  This is a Turbo Pascal 4.0 program, but you can 
  62.    convert it for TP3 by deleting out the line above
  63.    and replacing it with the line below. *)
  64.        (* LongSeek(FilVar, LongFilePos(FilVar)-overlap); *)
  65.     END;
  66.   Close(FilVar);
  67. END.